package com.husky.easyexcle.utils;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.husky.easyexcle.listener.LunchDataListenerMultiSheetForCSDN;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.system.ApplicationHome;

import java.util.ArrayList;

/**
 * @author huanfuan
 * @date 2023/5/28 17:53
 */

@Slf4j
public class ReadDemo3MultiSheetForCSDN {

    /**
     * 读取多个sheet
     */
    @Test
    public void test1() {
        // 读取已经填好的模板
        ApplicationHome ah = new ApplicationHome();
        //excle 导出文件夹
        String excelPath = ah.getDir().getPath()+"/src/main/resources/excelTemelate/";
        String fileName =excelPath + "加工任务.xlsx";
     //   String fileName = "F:\\easyExcel_project\\easy-excel\\src\\main\\resources\\excelTemelate\\env.excel";
        // 读取带下拉框的表格
        System.out.println("fileName = " + fileName);

        ExcelReader excelReader =
                EasyExcel.read(fileName).build();

        // 每个sheet分别创建监听器
        LunchDataListenerMultiSheetForCSDN listener0 = new LunchDataListenerMultiSheetForCSDN();
        LunchDataListenerMultiSheetForCSDN listener1 = new LunchDataListenerMultiSheetForCSDN();

        ReadSheet readSheet0 =
                EasyExcel.readSheet(0).registerReadListener(listener0).build();

        ReadSheet readSheet1 =
                EasyExcel.readSheet(1).registerReadListener(listener1).build();

        // 这里注意 一定要把sheet1 sheet2 一起传进去，不然有个问题就是03版的excel 会读取多次，浪费性能
        // 可以传多个ReadSheet对象，读多个sheet
        excelReader.read(readSheet0, readSheet1);

        // 这里千万别忘记关闭，读的时候会创建临时文件，到时磁盘会崩的
        excelReader.finish();
        // 程序执行到这里，excel 已经读完了，下面是处理数据

        // 示范一个读数据的方式，非重点，你可以用自己的方式
        ArrayList<LunchDataListenerMultiSheetForCSDN> listenerList = new ArrayList<>();
        listenerList.add(listener0);
        listenerList.add(listener1);
        for (LunchDataListenerMultiSheetForCSDN listener : listenerList) {
            // 从listtener中取出内容
            listener.getDataList().forEach(lineData -> {
                System.out.println("lineData = " + lineData);
                // 其它业务处理。。
            });
        }

    }

}
